package xyz.riceball.develop.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import xyz.riceball.develop.entity.dto.SqlDefinitionDTO;
import xyz.riceball.develop.entity.po.SqlDefinitionPO;
import xyz.riceball.develop.service.SqlDefinitionService;
import xyz.riceball.framework.core.annotation.RbSysRequest;
import xyz.riceball.framework.core.bean.ApiController;
import xyz.riceball.framework.core.bean.ApiR;
import xyz.riceball.framework.core.bean.PageParam;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;


/**
 * SQL定义 控制层
 * 本来这个功能是放在辅助开发层的，但是辅助开发是为整个系统提供服务，应该在最底层
 * 但是这个会用到RoutePO，所以循环引用了，所以这个controller暂时放在usercore模块中
 *
 * @author xiaovcloud
 * @since 2022-07-02 10:58:37
 */
@Deprecated
//@Api("SQL定义")
@RestController
@RequestMapping("/rb/api/develop/sqlDefinition")
public class SqlDefinitionController extends ApiController {

    @Resource
    private SqlDefinitionService sqlDefinitionService;

    /**
     * 分页查询所有数据
     *
     * @param pageParam       分页对象
     * @param sqlDefinitionPO 查询实体
     * @return 所有数据
     */
    @ApiOperation(value = "分页查询SQL定义")
    @GetMapping
    public ApiR<Page<SqlDefinitionPO>> selectPage(PageParam pageParam, SqlDefinitionPO sqlDefinitionPO) {
        return success(sqlDefinitionService.selectPage(PageParam.of(pageParam), sqlDefinitionPO));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @ApiOperation(value = "根据id查询SQL定义")
    @GetMapping("{id}")
    public ApiR<SqlDefinitionPO> selectOne(@PathVariable Serializable id) {
        return success(sqlDefinitionService.getById(id));
    }


    /**
     * 新增数据
     * 新增有两种情况 一种是关联route的，另一种是默认公共的
     * 如果是关联route的话，sql定义会直接关联上routeid 这个后面展示树形吧
     * 如果不是关联，先新增一条route，然后关联这条route
     *
     * @param sqlDefinitionDTO 实体对象
     * @return 新增结果
     */
    @ApiOperation(value = "新增SQL定义")
    @PostMapping
    public ApiR<SqlDefinitionDTO> insert(@RequestBody SqlDefinitionDTO sqlDefinitionDTO) {
        return sqlDefinitionService.add(sqlDefinitionDTO);
    }

    /**
     * 修改数据
     *
     * @param sqlDefinitionPO 实体对象
     * @return 修改结果
     */
    @ApiOperation(value = "修改SQL定义")
    @PutMapping
    public ApiR<Void> update(@RequestBody SqlDefinitionPO sqlDefinitionPO) {
        boolean edit = sqlDefinitionService.edit(sqlDefinitionPO);
        return ApiR.msg(edit, "修改菜单成功", "修改菜单失败");
    }

    /**
     * 删除数据
     *
     * @param ids id集合
     * @return 删除结果
     */
    @ApiOperation("删除SQL定义")
    @DeleteMapping
    public ApiR delete(@RequestBody List<String> ids) {
        return sqlDefinitionService.delete(ids);
    }
}
